Skip to main content

Utilisation de Depictor pour visualiser les groupes d'axes

Pour ce projet, vous avez également besoin du CODESYS Depictor add-on avec une licence valide.

L'application SoftMotion se compose de quatre entraînements rotatifs configurés en groupe d'axes. Les trois premiers axes déplacent le TCP dans le plan X/Y et le quatrième axe dans le plan Z.

L'exemple montre comment vous pouvez utiliser Depictor avec la configuration cinématique Kin_Scara3_Z. Vous pouvez également personnaliser la même procédure pour d'autres configurations cinématiques.

_sm_img_dep.png

Création du projet standard

  1. Créez un projet standard avec le CODESYS SoftMotion Win contrôleur et le langage de programmation ST.

  2. Ajouter un gestionnaire de bibliothèque dans le POU vue.

  3. Ouvrez le gestionnaire de bibliothèque et ajoutez les bibliothèques SM3_Depictor et DepictorBase.

Ajout et paramétrage des axes

  1. Insérer quatre axes virtuels sous l'objet Pool d'axes généraux SoftMotion et nommez les axes Drive1...Drive4.

  2. Paramétrer les axes Drive1, Drive2, Drive3 et Drive4 comme type d'axe fini avec des interrupteurs de fin de course logiciels de -180 degrés à 180 degrés.

    Éditeur de configuration :

    _sm_img_depictor_drives.png

Pour plus d'informations, consultez : Conduite virtuelle

Configuration des groupes d'axes

  1. Ajoutez un groupe d'axes "KinScara" sous l'application. Pour ce faire, cliquez sur Projet → Ajouter un objet → Groupe d'axes.

  2. Dans le configurateur, cliquez sur Sélectionnez la cinématique. Sélectionnez le TRAFO.Kin_Scara3_Z cinématique.

  3. Définissez les paramètres comme suit :

    • dArmLength1, dArmLength2, dArmLength3: 500

    • dDécalageA1, dDécalageA2, dDécalageA3, dDécalageZ: 0

  4. Commandez les axes comme suit :

    • A1: Drive1

    • A2: Drive2

    • A3: Drive3

    • Z: Drive4

    Remarque : Vous pouvez faire glisser les axes directement dans le champ de saisie.

Pour plus d'informations, voir : Cinématique

Création du programme du contrôleur

  1. Dans le PLC_PRG programme, déclarer des instances du MC_Power bloc fonctionnel pour tous les variateurs. Créé un istate variable pour le diagramme d'état.

    VAR
     Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power;
     istate: INT;
    END_VAR
  2. Définir un diagramme d'états transitions dans l'implémentation.

    CASE istate OF
     0:
     1:
     2:
    END_CASE
  3. Activer tous les lecteurs en état 0.

    0:
     Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN
      istate:=istate+1;
     END_IF
  4. Lorsque les axes sont activés, activer le groupe d'axes (passer de "désactivé" à "veille").

    VAR
     GroupEnable:MC_GroupEnable;
    END_VAR
    
    1:
     GroupEnable(AxisGroup:=KinScara, Execute:=TRUE);
     IF GroupEnable.Done THEN
      istate:=istate+1;
     END_IF
  5. Déclarez et initialisez une variable pour enregistrer la valeur de consigne en coordonnées machine. Déclarer deux instances de type SMC_POS_REF pour représenter le TCP en coordonnées cartésiennes et d'axe.

    VAR
     Frame: MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
     Pos_Cart: SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
     Pos_Axis: SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates
    END_VAR
    VAR CONSTANT
     axispos: TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
    END_VAR
    
    2:
     Pos_Cart.c:= Frame; // To represent the TCP in cartesian coordinates;
  6. Déclarer une instance de MC_MoveDirectAbsolute pour déplacer le robot SCARA aux coordonnées spécifiées.

    VAR
     MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates
    END_VAR
    
    2:
     MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined Axis coordinates
     //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates
    
     IF MoveAbs.Done THEN
             MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates
       istate:=2;
            END_IF
  7. Déclarer une variable de type SMC_GroupReadSetPosition pour lire la valeur actuelle du robot en coordonnées cartésiennes et coordonnées d'axe.

    VAR
     Car_pos, Axis_pos :SMC_GroupReadSetPosition; //to read the current axis values
    END_VAR
    
    2:
     Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // to read the current position in cartesian coordinates
     Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // to read the current axis values

L'ensemble du programme PLC_PRG

Comparez votre programme et ajoutez les parties de programme manquantes.

Déclaration

PROGRAM PLC_PRG
VAR
    Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 :MC_Power;
    istate: INT;

    GroupEnable:MC_GroupEnable;

    Frame:MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
    Pos_Cart:SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
    Pos_Axis:SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates

    MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates (PTP)

    Car_pos,Axis_pos :SMC_GroupReadSetPosition; //to read the current position of the TCP in Cartesian and Axis Coordinates and display it on the visu

    scara_Config:trafo.Kin_Scara3_Z_Config; // To set the configuration of the SCARA_3_Z
    kin_Config:SMC_SetKinConfiguration; // To set the defined configuration of SCARA_3_Z to the axis group used
    nPeriod:DINT:=0; // SCARA_3_Z Period
    Xelbow:BOOL:=TRUE;

END_VAR
VAR CONSTANT
    axispos : TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
END_VAR

Mise en œuvre

CASE istate OF

0:
 Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);

 IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN
  istate:=istate+1;
 END_IF

1:
 GroupEnable(AxisGroup:=KinScara, Execute:=TRUE);

 IF GroupEnable.Done THEN
  istate:=istate+1;
 END_IF

2:
 scara_Config(xElbowRight:=Xelbow, nPeriodA3:=nPeriod);
 kin_Config(AxisGroup:=KinScara,ConfigData:=scara_Config.Config, Execute:=TRUE);
 Pos_Cart.c:=Frame; // To represent the TCP in cartesian coordinates

 Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // read the current position in cartesian coordinates
 Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // read the current position in Axis coordinates

 MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined axis coordinates
 //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates

 IF MoveAbs.Done THEN
  MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates
  istate:=2;
 END_IF
END_CASE

Création d'un programme Depictor

  1. Ajoutez un nouveau POU "Depic" de type "Programme" sous l'application. Pour ce faire, cliquez sur Projet → Ajouter un objet → POU.

  2. Déclarer une variable de type SM3_Depictor.SMC_R_Scara3_Z_Data. Déclarer une variable LrSize de genre LREAL et initialisez la variable avec la valeur 100.

    VAR
     ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data;
     LrSize:LREAL:=100;
    END_VAR
  3. Insérez un appel au bloc fonction dans l'implémentation.

    ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo);
  4. Ajoutez le POU "Depic" au Tâche principale.

Configuration de Depictor

  1. Ajoutez un objet "Depictor" sous l'application. Pour ce faire, cliquez sur Projet → Ajouter un objet → Depictor.

  2. Double-cliquez sur l'objet.

  3. Sélectionnez le Pose élément dans l'arbre Depictor.

  4. Cliquez sur Depictor → Ajouter un élément.

    Les Boîte l'élément est ajouté sous la pose.

  5. Sélectionnez le Dépeceur Réf. option dans les propriétés de l'élément.

  6. Clique le _cds_icon_three_dots.png bouton.

  7. Sélectionnez le SMC_R_Depictor_Scara3_Z objet de la SM3_Depictor une bibliothèque.

  8. Définissez les variables d'interface comme suit :

    • fb: Depic.ScaraTrafo

    • lrZ_: Drive1.fSetPosition

    • lrZmin: dix

    • lrZmax: -50

    • lrTaille: Depic.LrSize

    • xShowPlane: 0

Création de visualisations

Créez un écran de visualisation dans lequel les coordonnées cartésiennes et les coordonnées des axes peuvent être affichées et modifiées.

_sm_img_depictor_visu.png
  1. Ajoutez un objet "Visualisation" sous l'application. Pour ce faire, cliquez sur Projet → Ajouter un objet → Visualisation.

  2. Ouvrez la visualisation dans l'éditeur.

  3. Insérez un Rectangle élément de visualisation (1).

  4. Modifiez les propriétés de l'élément.

    • Textes → Texte: %s

    • Variables de texte → Variable de texte: PLC_PRG.Car_pos.Position.c.X

    • Configuration d'entrée → OnMouseDown → Écrire la variable

      • Type d'entrée: VisuDialogs.Numppad

      • Utiliser une autre variable: PLC_PRG.Frame.X

  5. Insérez l'autre Boîte éléments de visualisation.

  6. Modifiez les propriétés des éléments (2) et (3).

    • Textes → Texte: %s

    • Variables de texte → Variable de texte: PLC_PRG.Car_pos.Position.c.Y ou PLC_PRG.Car_pos.Position.c.Z

    • Configuration d'entrée → OnMouseDown → Écrire la variable

      • Type d'entrée: VisuDialogs.Numppad

      • Utiliser une autre variable: PLC_PRG.Frame.Y et PLC_PRG.Frame.Z

  7. Modifiez les propriétés des éléments (4), (5) et (6).

    • Textes → Texte: %s

    • Variables de texte → Variable de texte: PLC_PRG.Frame.A ou PLC_PRG.Frame.B ou PLC_PRG.Frame.C

  8. Modifiez les propriétés des éléments (7), (8), (9) et (10).

    • Textes → Texte: %s

    • Variables de texte → Variable de texte: PLC_PRG.Axis_pos.Position.a.a0 ou PLC_PRG.Axis_pos.Position.a.a1 ou PLC_PRG.Axis_pos.Position.a.a2 ou PLC_PRG.Axis_pos.Position.a.a3

    • Configuration d'entrée → OnMouseDown → Écrire la variable

      • Type d'entrée: VisuDialogs.Numppad

      • Utiliser une autre variable: PLC_PRG.Pos_Axis.a.a0 et PLC_PRG.Pos_Axis.a.a1 et PLC_PRG.Pos_Axis.a.a2 et PLC_PRG.Pos_Axis.a.a3

  9. Étiquetez les éléments de visualisation avec le Étiqueter élément.

Démarrer et tester le programme

Vous pouvez modifier les valeurs des axes dans la visualisation du projet. Si vous commentez la commande de mouvement active (MoveAbs..., ...) dans le programme PLC_PRG et supprimez les commentaires de la deuxième commande de déplacement, vous pouvez alors modifier les coordonnées cartésiennes.

  1. Générez le projet et téléchargez-le dans l'automate.

  2. Ouvrez l'éditeur de l'objet Depictor dans votre projet.

  3. Basculez vers la visualisation et modifiez les valeurs des axes ou les valeurs cartésiennes. Observez le mouvement du robot SCARA dans Depictor.